package com.example.ivideo_2211a.take

import android.media.CamcorderProfile
import android.media.MediaRecorder
import android.util.Log

/**
 * 视频录制配置类
 * 处理不同Android版本的兼容性问题
 */
object VideoRecorderConfig {
    
    private const val TAG = "VideoRecorderConfig"
    
    /**
     * 配置MediaRecorder的录制质量
     * 按优先级尝试不同的质量设置
     */
    fun configureQuality(mediaRecorder: MediaRecorder): Boolean {
        return try {
            // 优先尝试高质量录制
            if (trySetProfile(mediaRecorder, CamcorderProfile.QUALITY_HIGH)) {
                Log.d(TAG, "使用高质量录制配置")
                return true
            }
            
            // 如果高质量不可用，尝试中等质量
//            if (trySetProfile(mediaRecorder, CamcorderProfile.QUALITY_MEDIUM)) {
//                Log.d(TAG, "使用中等质量录制配置")
//                return true
//            }
            
            // 如果中等质量也不可用，使用低质量
            if (trySetProfile(mediaRecorder, CamcorderProfile.QUALITY_LOW)) {
                Log.d(TAG, "使用低质量录制配置")
                return true
            }
            
            // 如果所有预设质量都不可用，手动设置基本参数
            Log.d(TAG, "使用手动配置录制参数")
            setManualConfig(mediaRecorder)
            true
            
        } catch (e: Exception) {
            Log.e(TAG, "配置录制质量失败", e)
            false
        }
    }
    
    /**
     * 尝试设置指定的录制质量配置
     */
    private fun trySetProfile(mediaRecorder: MediaRecorder, quality: Int): Boolean {
        return try {
            mediaRecorder.setProfile(CamcorderProfile.get(quality))
            true
        } catch (e: Exception) {
            Log.w(TAG, "设置录制质量 $quality 失败: ${e.message}")
            false
        }
    }
    
    /**
     * 手动设置录制参数
     * 适用于不支持CamcorderProfile的设备
     */
    private fun setManualConfig(mediaRecorder: MediaRecorder) {
        try {
            // 设置编码器
            mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT)
            mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
            
            // 设置输出格式
            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            
            // 设置视频参数
            mediaRecorder.setVideoFrameRate(15)
            mediaRecorder.setVideoSize(640, 480)
            mediaRecorder.setVideoEncodingBitRate(1000000) // 1Mbps
            
            // 设置音频参数
            mediaRecorder.setAudioEncodingBitRate(128000) // 128kbps
            mediaRecorder.setAudioSamplingRate(44100) // 44.1kHz
            
            Log.d(TAG, "手动配置录制参数成功")
            
        } catch (e: Exception) {
            Log.e(TAG, "手动配置录制参数失败", e)
            throw e
        }
    }
    
    /**
     * 获取可用的录制质量列表
     */
    fun getAvailableQualities(): List<String> {
        val qualities = mutableListOf<String>()
        
        if (isQualityAvailable(CamcorderProfile.QUALITY_HIGH)) {
            qualities.add("HIGH")
        }
//        if (isQualityAvailable(CamcorderProfile.QUALITY_MEDIUM)) {
//            qualities.add("MEDIUM")
//        }
        if (isQualityAvailable(CamcorderProfile.QUALITY_LOW)) {
            qualities.add("LOW")
        }
        
        return qualities
    }
    
    /**
     * 检查指定的录制质量是否可用
     */
    private fun isQualityAvailable(quality: Int): Boolean {
        return try {
            CamcorderProfile.get(quality)
            true
        } catch (e: Exception) {
            false
        }
    }
    
    /**
     * 获取录制质量描述
     */
    fun getQualityDescription(quality: Int): String {
        return when (quality) {
            CamcorderProfile.QUALITY_HIGH -> "高质量"
           // CamcorderProfile.QUALITY_MEDIUM -> "中等质量"
            CamcorderProfile.QUALITY_LOW -> "低质量"
            else -> "未知质量"
        }
    }
}
